package serverAccess;

import java.util.ArrayList;
import java.util.HashSet;
import java.util.Set;

public class ServerManager {

	private static volatile ServerManager instance = null;
	private ServerView serverView;


	/**
	 * Constructeur de l'objet.
	 */
	private ServerManager() {
		this.serverView = new ServerView();
	}

	/**
	 * Méthode permettant de renvoyer une instance de la classe Singleton
	 * @return Retourne l'instance du singleton.
	 */
	public final static ServerManager getInstance() {

		if (ServerManager.instance == null) {
			// Le mot-clé synchronized sur ce bloc empêche toute instanciation
			// multiple même par différents "threads".
			// Il est TRES important.
			synchronized(ServerManager.class) {
				if (ServerManager.instance == null) {
					ServerManager.instance = new ServerManager();
				}
			}
		}
		return ServerManager.instance;
	}

	public ArrayList<String> getLabel(String name){
		ArrayList<String> list = this.serverView.getLabel(name);
		list= this.deleteDoublon(list);
		return list;
	}

	public ArrayList<String> getSousClasse(String mot) {
		ArrayList<String> list = this.serverView.getSubClass(mot);
		list = this.deleteDoublon(list);
		return list;
	}

	public ArrayList<String> getInstanceFromMot(String mot) {
		ArrayList<String> list = this.serverView.getInstance(mot);
		list = this.deleteDoublon(list);
		return list;
	}
	
	/**
	 * Supprime les doublons d'une liste
	 * @param in liste avec les doublons
	 * @return liste sans les doublons
	 */
	private static ArrayList<String> deleteDoublon(ArrayList<String> in){
		Set<String> set = new HashSet<String>() ;
		set.addAll(in ) ;
		ArrayList<String> newList = new ArrayList<String>(set) ;
		return newList;
	}


}
